#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <cstdlib>
#include <sys/wait.h>

void handler(int signum)
{
    std::cout << "hello signal: " << signum << std::endl;
    while (true)
    {
        sigset_t pending;
        sigpending(&pending);
        for (int i = 31; i >= 1; i--)
        {
            if (sigismember(&pending, i))
            {
                std::cout << "1";
            }
            else
            {
                std::cout << "0";
            }
        }
        std::cout << std::endl;
        sleep(1);
    }
    exit(1);
}
int main()
{
    struct sigaction act, oact;
    act.sa_handler = handler;
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask, 3);
    sigaddset(&act.sa_mask, 4);
    act.sa_flags = 0;
    sigaction(SIGINT, &act, &oact);
    while (true)
    {
        std::cout << "hello world: " << getpid() << std::endl;
        sleep(1);
    }
    return 0;
}

// int main()
// {
//     signal(SIGCHLD, SIG_IGN);
//     for (int i = 0; i < 10; i++)
//     {
//         pid_t id = fork();
//         if (id == 0)
//         {
//             sleep(3);
//             std::cout << "I am child,exit" << std::endl;
//             exit(3);
//         }
//     }
//     while (true)
//     {
//         std::cout << "I am fater,exit" << std::endl;
//         sleep(1);
//     }
//     return 0;
// }